<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh-CN">
<%@include file="/WEB-INF/include-head.jsp"%>
<link rel="stylesheet" href="css/pagination.css">
<script type="text/javascript" src="jquery/jquery.pagination.js"></script>
<link rel="stylesheet" href="ztree/zTreeStyle.css" />
<script type="text/javascript" src="ztree/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript" src="crowd/my-role.js"></script>
<script type="text/javascript">
	$(function() {

		// 1.为分页操作准备初始化数据
		window.pageNum = 1;
		window.pageSize = 5;
		window.keyword = "";

		generatePage();

		//3.给查询按钮绑定点击响应函数
		$("#searchBtn").click(function() {

			// ①获取关键词的值
			window.keyword = $("#keywordInput").val();

			// 调用分页函数刷新页面
			generatePage();
		});

		// 4.点击新增按钮打开魔态框
		$("#showAddModelView").click(function() {
			$("#addModal").modal("show");

		});

		// 5.给新增模态框中的保存按钮绑定单击响应函数
		$("#saveRoleBtn").click(function() {

			// ①获取用户在文本框中输入的角色名称
			var roleName = $.trim($("#addModal [name=roleName]").val());

			// ②发送ajax请求
			$.ajax({
				"url" : "role/save.json",
				"type" : "post",
				"data" : {
					"name" : roleName
				},
				"dataType" : "json",

				"success" : function(response) {

					var result = response.result;

					if (result == "SUCCESS") {
						layer.msg("操作成功！");

						// 重新加载分页数据
						window.pageNum = 99999999;
						generatePage();

					}

					if (result == "FAILED") {
						layer.msg("操作失败！" + result.message);
					}
				},

				"error" : function(response) {
					layer.msg(response.status + " " + response.statusText);

				}

			});

			// 关闭模态框
			$("#addModal").modal("hide");

			// 清理
			$("#addModal [name=roleName]").val("");

		});

		// 6.给页面上的“铅笔”按钮绑定单击响应函数，目的是打开模态框
		// 传统的事件绑定方式，只能在第一页有效，翻页之后就失效了
		// %(".pencilButton").click(function(){

		//	alert("aaa..");

		// });
		// 使用jQuery对象的on()函数可以解决上面的问题
		// ①首先找到所有动态生成的元素所附着的静态元素
		// ②on()函数的第一个参数是事件类型
		// ③on()函数的第二个参数是找到真正要绑定事件的元素的选择器
		// ④on()函数的第三个参数是事件响应函数
		$("#rolePageBody").on("click", ".pencilButton", function() {

			// 打开模态框
			$("#editModal").modal("show");

			// 获取表格中当前行中的角色名称
			var roleName = $(this).parent().prev().text();

			// 获取当前角色的id
			// 依据是：var pencilButton = "<button id='" + roleId + "' 这段代码中我们把roleId设置到id属性了
			// 为了让执行更新的按钮能够获取到roleId的值，把它放在全局变量上
			window.roleId = this.id;

			// 使用roleName的值设置模态框中文本框
			$("#editModal [name=roleName]").val(roleName);

		});

		// 7.更新模态框中的更新按钮绑定单击响应函数
		$("#updateRoleBtn").click(function() {

			// 从文本框中获取角色名称
			var roleName = $("#editModal [name=roleName]").val();

			// 发送ajax请求，执行更新
			$.ajax({
				"url" : "role/update.json",
				"type" : "post",
				"data" : {
					"id" : window.roleId,
					"name" : roleName
				},
				"dataType" : "json",

				"success" : function(response) {

					var result = response.result;

					if (result == "SUCCESS") {
						layer.msg("操作成功！");
						generatePage();

					}

					if (result == "FAILED") {
						layer.msg("操作失败！" + result.message);
					}
				},

				"error" : function(response) {
					layer.msg(response.status + " " + response.statusText);

				}

			});

			// 关闭模态框
			$("#addModal").modal("hide");

		});

		// 8.点击取模态框中的确认删除按钮执行删除
		$("#removeRoleBtn").click(function() {

			var requestBody = JSON.stringify(window.roleIdArray);

			$.ajax({
				"url" : "role/remove/by/role/id/array.json",
				"type" : "post",
				"data" : requestBody,
				"contentType" : "application/json;charset=UTF-8",
				"dataType" : "json",
				"success" : function(response) {

					var result = response.result;

					if (result == "SUCCESS") {
						layer.msg("操作成功！");
						alert("aaaa");
						generatePage();

					}

					if (result == "FAILED") {
						layer.msg("操作失败！" + result.message);
					}
				},

				"error" : function(response) {
					alert("bbbb");
					layer.msg(response.status + " " + response.statusText);

				}
			});

			// 关闭模态框
			$("#confirmModal").modal("hide");

		});

		// 9.给单条删除
		$("#rolePageBody").on("click", ".removeButton", function() {

			// 从当前按钮出发获取角色名称
			var roleName = $(this).parent().prev().text();

			// 创建role对象存入数组
			var roleArray = [ {
				roleId : this.id,
				roleName : roleName

			} ];

			showConfirmModal(roleArray);

		});

		// 10.给总的checkbox绑定单击响应函数
		$("#summaryBox").click(function() {
			// 获取当前多选框自身的状态
			var currentStatus = this.checked;

			// 使用当前多选框的状态设置其他的值
			$(".itemBox").prop("checked", currentStatus);

		});

		// 11.全选的，全不选的反向操作
		$("#rolePageBody").on("click", ".itemBox", function() {

			// 获取一下当前已经选择的itemBox数量
			var checkedBoxCount = $(".itemBox:checked").length;

			// 获取全部.itemBox的数量
			var totalBoxCount = $(".itemBox").length;

			// 使用二者比较的结果设置checkbox的属性
			$("#summaryBox").prop("checked", checkedBoxCount == totalBoxCount);

		});

		// 12.批量删除的按钮进行绑定
		$("#batchRemoveButton").click(function() {

			// 创建数组对象用来存放后面获取到的角色对象
			var roleArray = [];

			// 遍历当前选中的多选框
			$(".itemBox:checked").each(function() {
				// 使用this遍历当前使用的多选框
				var roleId = this.id;

				// 通过DOM操作获取角色名称
				var roleName = $(this).parent().next().text();

				roleArray.push({
					"roleId" : roleId,
					"roleName" : roleName

				});

			});

			// 检查是否优质
			if (roleArray.length == 0) {
				layer.msg("请至少选择一个执行删除");
				return;
			}

			// 调用专门的函数打开模态框
			showConfirmModal(roleArray);

		});

		// 13.给分配权限按钮绑定单击响应函数 
		$("#rolePageBody").on("click", ".checkButton", function() {

			// 把当前角色id存入全局变量
			window.roleId = this.id;

			// 打开模态框 
			$("#assignModal").modal("show");

			// 在模态框中装载树 Auth 的形结构数据 
			fillAuthTree();
		});
		
		// 14.给分配权限模态框中的“分配”按钮绑定单击响应函数 
		$("#assignBtn").click(function() {
			
			// ①收集树形结构的各个节点中被勾选的节点 
			// [1]声明一个专门的数组存放 id 
			var authIdArray = [];

			// [2]获取 zTreeObj 对象 
			var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");

			// [3]获取全部被勾选的节点
			var checkedNodes = zTreeObj.getCheckedNodes();

			// [4]遍历 checkedNodes 
			for (var i = 0; i < checkedNodes.length; i++) {
				var checkedNode = checkedNodes[i];
				var authId = checkedNode.id;
				authIdArray.push(authId);
			}
			
			// ②发送请求执行分配 
			var requestBody = {
				"authIdArray" : authIdArray,

				// 为了服务器端 handler 方法能够统一使用 List<Integer>方式接收数据，roleId 也存 入数组 
				"roleId" : [ window.roleId ]
			};

			requestBody = JSON.stringify(requestBody);
			$.ajax({
				"url" : "assign/do/role/assign/auth.json",
				"type" : "post",
				"data" : requestBody,
				"contentType" : "application/json;charset=UTF-8",
				"dataType" : "json",
				"success" : function(response) {
					var result = response.result;
					if (result == "SUCCESS") {
						layer.msg("操作成功！");
					}

					if (result == "FAILED") {
						layer.msg("操作失败！" + response.message);
					}
				},

				"error" : function(response) {
					layer.msg(response.status + " " + response.statusText);
				}
			});
			$("#assignModal").modal("hide");
		});

	});
</script>
<body>

	<%@include file="/WEB-INF/include-nav.jsp"%>
	<div class="container-fluid">
		<div class="row">
			<%@include file="/WEB-INF/include-sidebar.jsp"%>
		</div>
		<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
			<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
				<div class="panel panel-default">
					<div class="panel-heading">
						<h3 class="panel-title">
							<i class="glyphicon glyphicon-th"></i> 数据列表
						</h3>
					</div>
					<div class="panel-body">
						<form class="form-inline" role="form" style="float: left;">
							<div class="form-group has-feedback">
								<div class="input-group">
									<div class="input-group-addon">查询条件</div>
									<input id="keywordInput" class="form-control has-success"
										type="text" placeholder="请输入查询条件">
								</div>
							</div>
							<button id="searchBtn" type="button" class="btn btn-warning">
								<i class="glyphicon glyphicon-search"></i> 查询
							</button>
						</form>
						<button type="button" id="batchRemoveButton"
							class="btn btn-danger" style="float: right; margin-left: 10px;">
							<i class=" glyphicon glyphicon-remove"></i> 删除
						</button>
						<button type="button" id="showAddModelView"
							class="btn btn-primary" style="float: right;">
							<i class="glyphicon glyphicon-plus"></i> 新增
						</button>
						<br>
						<hr style="clear: both;">
						<div class="table-responsive">
							<p>${requestScope.exception.message}</p>
							<table class="table  table-bordered">
								<thead>
									<tr>
										<th width="30">#</th>
										<th width="30"><input id="summaryBox" type="checkbox"></th>
										<th>名称</th>
										<th width="100">操作</th>
									</tr>
								</thead>
								<tbody id="rolePageBody">

								</tbody>
								<tfoot>
									<tr>
										<td colspan="6" align="center">
											<div id="Pagination" class="pagination">
												<!-- 这里显示分页 -->
											</div>
										</td>
									</tr>

								</tfoot>
							</table>
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>

	<%@include file="/WEB-INF/modal-role-add.jsp"%>
	<%@include file="/WEB-INF/modal-role-edit.jsp"%>
	<%@include file="/WEB-INF/modal-role-confirm.jsp"%>
	<%@include file="/WEB-INF/modal-role-assign-auth.jsp"%>
</body>
</html>